
<!DOCTYPE html>
<html>
  <head>
    <title>willMatchWith</title>
    <link rel="stylesheet" href="prism.css">
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
    <div id="header">
      <div class="doc-title"><a href="folktale.html"><span class="doc-title"><span class="product-name">Folktale</span><span class="version">v2.1.0</span></span></a><ul class="navigation"><li class="navigation-item"><a href="https://github.com/origamitower/folktale" title="">GitHub</a></li><li class="navigation-item"><a href="/docs/support/" title="">Support</a></li><li class="navigation-item"><a href="/docs/v2.1.0/contributing/" title="">Contributing</a></li></ul></div>
    </div>
    <div id="content-wrapper"><div id="content-panel"><h1 class="entity-title">willMatchWith</h1><div class="highlight-summary"><div><p>Chooses and executes a function for each variant in a Task. The function must
return a new task, whose value and state will be assimilated.</p>
</div></div><div class="deprecation-section"><strong class="deprecation-title">This feature is experimental!</strong><p>This API is still experimental, so it may change or be removed in future versions. You should not rely on it for production applications.</p></div><div class="definition"><h2 class="section-title" id="signature">Signature</h2><div class="signature">value(pattern)</div><div class="type-definition"><div class="type-definition-container"><div class="type-title-container"><strong class="type-title">Type</strong><a class="info" href="/docs/v2.1.0/misc/type-notation/">(what is this?)</a></div><pre class="type"><code class="language-haskell">forall e1, e2, v1, v2:
  type Pattern = { row |
    Cancelled: ()  =&gt; Task e2 v2,
    Resolved:  (b) =&gt; Task e2 v2,
    Rejected:  (a) =&gt; Task e2 v2
  }

  (Task e1 v1).(Pattern) =&gt; Task e2 v2</code></pre></div></div></div><h2 class="section-title">Documentation</h2><div class="documentation"><div><p>Chooses and executes a function for each variant in a Task. The function must
return a new task, whose value and state will be assimilated.</p>
<h2 id="example-">Example:</h2>
<pre><code>const { task, of, rejected } = require(&#39;folktale/concurrency/task&#39;);

const result1 = await of(&#39;hello&#39;).willMatchWith({
  Cancelled: () =&gt; of(&#39;cancelled&#39;),
  Rejected: (error) =&gt; of(`rejected ${error}`),
  Resolved: (value) =&gt; of(`resolved ${value}`)
}).run().promise();
$ASSERT(result1 == &#39;resolved hello&#39;);

const result2 = await rejected(&#39;hello&#39;).willMatchWith({
  Cancelled: () =&gt; of(&#39;cancelled&#39;),
  Rejected: (error) =&gt; of(`rejected ${error}`),
  Resolved: (value) =&gt; of(`resolved ${value}`)
}).run().promise();
$ASSERT(result2 == &#39;rejected hello&#39;);

const result3 = await task(r =&gt; r.cancel()).willMatchWith({
  Cancelled: () =&gt; of(&#39;cancelled&#39;),
  Rejected: (error) =&gt; of(`rejected ${error}`),
  Resolved: (value) =&gt; of(`resolved ${value}`)
}).run().promise();
$ASSERT(result3 == &#39;cancelled&#39;);
</code></pre></div></div><div class="members"><h2 class="section-title" id="properties">Properties</h2></div><div class="source-code"><h2 class="section-title" id="source-code">Source Code</h2><div class="source-location">Defined in source/concurrency/task/_task.js at line 20, column 0</div><pre class="source-code"><code class="language-javascript">willMatchWith(pattern) {
    return new Task(resolver =&gt; {
      const execution = this.run();
      resolver.onCancelled(() =&gt; execution.cancel());
      
      const resolve = (handler) =&gt; (value) =&gt; handler(value).run().listen({
        onCancelled: resolver.cancel,
        onRejected:  resolver.reject,
        onResolved:  resolver.resolve
      });
      execution.listen({
        onCancelled: resolve(_ =&gt; pattern.Cancelled()),
        onRejected:  resolve(pattern.Rejected),
        onResolved:  resolve(pattern.Resolved)
      });
    });
  }</code></pre></div></div><div id="meta-panel"><div class="meta-section"><div class="meta-field"><strong class="meta-field-title">Stability</strong><div class="meta-field-value">experimental</div></div><div class="meta-field"><strong class="meta-field-title">Licence</strong><div class="meta-field-value">MIT</div></div><div class="meta-field"><strong class="meta-field-title">Module</strong><div class="meta-field-value">folktale/concurrency/task/_task</div></div></div><div class="table-of-contents"><div class="meta-section-title">On This Page</div><ul class="toc-list level-1"><li class="toc-item"><a href="#signature">Signature</a></li><li class="toc-item"><span class="no-anchor">Documentation</span><ul class="toc-list level-2"><li class="toc-item"><a href="#example-" title="Example:"><div><p>Example:</p>
</div></a></li></ul></li><li class="toc-item"><a href="#properties">Properties</a><ul class="toc-list level-2"></ul></li><li class="toc-item"><a href="#source-code">Source Code</a></li></ul></div><div class="meta-section"><strong class="meta-section-title">Authors</strong><div class="meta-field"><strong class="meta-field-title">Copyright</strong><div class="meta-field-value">(c) 2013-2017 Quildreen Motta, and CONTRIBUTORS</div></div><div class="meta-field"><strong class="meta-field-title">Authors</strong><div class="meta-field-value"><ul class="meta-list"><li>Quildreen Motta</li></ul></div></div><div class="meta-field"><strong class="meta-field-title">Maintainers</strong><div class="meta-field-value"><ul class="meta-list"><li>Quildreen Motta &lt;queen@robotlolita.me&gt; (http://robotlolita.me/)</li></ul></div></div></div></div></div>
    <script>
void function() {
  var xs = document.querySelectorAll('.documentation pre code');
  for (var i = 0; i < xs.length; ++i) {
    xs[i].className = 'language-javascript code-block';
  }
}()
    </script>
    <script src="prism.js"></script>
  </body>
</html>